↳ Prolog
↳ PrologToPiTRSProof
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
PERM_IN_GA(.(X, Y), .(U, V)) → U1_GA(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
PERM_IN_GA(.(X, Y), .(U, V)) → DELETE_IN_AGA(U, .(X, Y), W)
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → U3_AGA(U, X, Y, Z, delete_in_aga(U, Y, Z))
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → DELETE_IN_AGA(U, Y, Z)
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_GA(X, Y, U, V, perm_in_ga(W, V))
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → PERM_IN_GA(W, V)
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM_IN_GA(.(X, Y), .(U, V)) → U1_GA(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
PERM_IN_GA(.(X, Y), .(U, V)) → DELETE_IN_AGA(U, .(X, Y), W)
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → U3_AGA(U, X, Y, Z, delete_in_aga(U, Y, Z))
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → DELETE_IN_AGA(U, Y, Z)
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_GA(X, Y, U, V, perm_in_ga(W, V))
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → PERM_IN_GA(W, V)
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → DELETE_IN_AGA(U, Y, Z)
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
DELETE_IN_AGA(U, .(X, Y), .(X, Z)) → DELETE_IN_AGA(U, Y, Z)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
DELETE_IN_AGA(.(X, Y)) → DELETE_IN_AGA(Y)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → PERM_IN_GA(W, V)
PERM_IN_GA(.(X, Y), .(U, V)) → U1_GA(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
perm_in_ga([], []) → perm_out_ga([], [])
perm_in_ga(.(X, Y), .(U, V)) → U1_ga(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
U1_ga(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → U2_ga(X, Y, U, V, perm_in_ga(W, V))
U2_ga(X, Y, U, V, perm_out_ga(W, V)) → perm_out_ga(.(X, Y), .(U, V))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U1_GA(X, Y, U, V, delete_out_aga(U, .(X, Y), W)) → PERM_IN_GA(W, V)
PERM_IN_GA(.(X, Y), .(U, V)) → U1_GA(X, Y, U, V, delete_in_aga(U, .(X, Y), W))
delete_in_aga(X, .(X, Y), Y) → delete_out_aga(X, .(X, Y), Y)
delete_in_aga(U, .(X, Y), .(X, Z)) → U3_aga(U, X, Y, Z, delete_in_aga(U, Y, Z))
U3_aga(U, X, Y, Z, delete_out_aga(U, Y, Z)) → delete_out_aga(U, .(X, Y), .(X, Z))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
PERM_IN_GA(.(X, Y)) → U1_GA(delete_in_aga(.(X, Y)))
U1_GA(delete_out_aga(U, W)) → PERM_IN_GA(W)
delete_in_aga(.(X, Y)) → delete_out_aga(X, Y)
delete_in_aga(.(X, Y)) → U3_aga(X, delete_in_aga(Y))
U3_aga(X, delete_out_aga(U, Z)) → delete_out_aga(U, .(X, Z))
delete_in_aga(x0)
U3_aga(x0, x1)
delete_in_aga(.(X, Y)) → delete_out_aga(X, Y)
POL(.(x1, x2)) = 1 + x1 + 2·x2
POL(PERM_IN_GA(x1)) = 2·x1
POL(U1_GA(x1)) = 2·x1
POL(U3_aga(x1, x2)) = 1 + x1 + 2·x2
POL(delete_in_aga(x1)) = x1
POL(delete_out_aga(x1, x2)) = x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
PERM_IN_GA(.(X, Y)) → U1_GA(delete_in_aga(.(X, Y)))
U1_GA(delete_out_aga(U, W)) → PERM_IN_GA(W)
delete_in_aga(.(X, Y)) → U3_aga(X, delete_in_aga(Y))
U3_aga(X, delete_out_aga(U, Z)) → delete_out_aga(U, .(X, Z))
delete_in_aga(x0)
U3_aga(x0, x1)
U1_GA(delete_out_aga(U, W)) → PERM_IN_GA(W)
POL(.(x1, x2)) = x1 + x2
POL(PERM_IN_GA(x1)) = 2·x1
POL(U1_GA(x1)) = x1
POL(U3_aga(x1, x2)) = 2·x1 + x2
POL(delete_in_aga(x1)) = 2·x1
POL(delete_out_aga(x1, x2)) = 2 + x1 + 2·x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
PERM_IN_GA(.(X, Y)) → U1_GA(delete_in_aga(.(X, Y)))
delete_in_aga(.(X, Y)) → U3_aga(X, delete_in_aga(Y))
U3_aga(X, delete_out_aga(U, Z)) → delete_out_aga(U, .(X, Z))
delete_in_aga(x0)
U3_aga(x0, x1)